package com.sprouting.ops.dao;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sprouting.ops.interfaces.BaseDaoMapper;
import com.sprouting.ops.model.OpsRole;
import com.sprouting.ops.model.qo.RoleQo;
import com.sprouting.ops.model.vo.RoleSimpleVo;
import com.sprouting.ops.model.vo.UserOwnRoleVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (Role)表数据库访问层
 *
 * @author longx
 * @since 2023-03-19 22:44:35
 */
public interface OpsRoleDao extends BaseDaoMapper<OpsRole> {

    /**
     * 根据用户ID查询所有的角色
     * @param userId 用户ID
     * @return
     */
    List<OpsRole> getRoleByUserId(String userId);

    /**
     * 用户拥有的角色
     * @param userId 当前用户ID
     * @return
     */
    List<OpsRole> getRoleHaveByUserId(String userId);

    /**
     * 分页获取用户拥有的角色
     * @param page 分页参数
     * @param query 查询条件
     * @return
     */
    Page<OpsRole> getRoleHaveByUserIdPage(Page page, @Param("query") RoleQo query);

    /**
     * 根据角色名称查询角色
     * @param code 角色代码
     * @param id 角色ID，注，当传了ID，则会忽略该ID的值
     * @return
     */
    OpsRole getRoleByCode(@Param("code") String code, @Param("id") String id);


    /**
     * 根据创建者ID查询用户创建的角色
     * @param createId 角色创建人ID
     * @return
     */
    List<OpsRole> getRoleByCreateId(String createId);

    /**
     * 用户拥有的和创建的角色
     * @param userId 用户ID
     * @return
     */
    List<UserOwnRoleVo> getUserOwnRole(String userId);

    /**
     * 分页查询自己创建的角色和拥有的角色
     * @param page 分页参数
     * @param query 查询参数
     * @return
     */
    Page<UserOwnRoleVo> getPage(Page page, @Param("query") RoleQo query);

    /**
     * 根据用户ID查询拥有的角色
     * @param userIdList 用户id
     * @return
     */
    List<RoleSimpleVo> getByUserIdBatch(List<String> userIdList);
}

